package com.luoy.hadoop;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;


/**
 * @author LUOYUAN
 * @create 2018-12-02-16:47
 */
public class HDFSClient {
    public static void main(String[] args) throws Exception {
        //0 获取配置信息
        Configuration configuration = new Configuration();
		configuration.set("fs.defaultFS", "hdfs://hadoop102:8020");

        //1 获取文件系统
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"), configuration, "luoy");

        // 2 上传本地数据到集群
        fs.copyFromLocalFile(new Path("C:\\Users\\luoyuan\\Desktop\\luoyang.txt"), new Path("/user/luoy/luo.txt"));

        // 3 关闭fs
        fs.close();
    }

    // 获取文件系统
    @Test
    public void getFileSystem() throws Exception{
        // 0 创建配置信息对象  获取配置信息优先级：code>resources中配置文件>集群中的配置文件
        Configuration configuration = new Configuration();

        // 1 获取文件系统
        //FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"), configuration, "luoy");
        FileSystem fs = FileSystem.get(configuration);
        // 2打印文件系统
        System.out.println("文件系统"+fs.toString());

        // 3 关闭资源
        fs.close();
    }

    // 上传文件
    @Test
    public void putFileToHDFS() throws IOException, InterruptedException, URISyntaxException {
        Configuration configuration = new Configuration();

        // 1 获取文件系统
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"), configuration, "luoy");

        // 2 执行上传文件命令,同时删除源文件
        fs.copyFromLocalFile(true, new Path("C:\\Users\\luoyuan\\Desktop\\luoyang.txt"), new Path("/user/luoy/ji.txt"));

        // 3 关闭资源
        fs.close();
    }

    /**
     * 在集群上创建目录
     * @throws Exception
     */
    @Test
    public void createHDFS() throws Exception {
        Configuration configuration = new Configuration();

        // 1 获取文件系统
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"), configuration, "luoy");

        //2.创建目录
        fs.mkdirs(new Path("/user/luoy/lyang"));

        //3.关流
        fs.close();
    }


}
